package pdamh.view.utils;

import java.util.ArrayList;
import java.util.Collection;

import javax.swing.JTabbedPane;

import pdamh.view.PanelTabelaCarga;

public class JTabbedPanePDAMH extends JTabbedPane {

	private static final long serialVersionUID = 7560302804325745216L;

	public void addTab(String unidade, String subUni, PanelTabelaCarga tela) {
		String titulo = createTitle(unidade, subUni);
		if (!tabExists(titulo))
			addTab(titulo, tela);
		setSelectedIndex(titulo);
	}

	private void setSelectedIndex(String titulo) {
		for (int i = 0; i < getTabCount(); i++)
			if (titulo.equals(getTitleAt(i)))
				setSelectedIndex(i);
	}
	
	public void reload() {
		for (int i = 0; i < getTabCount(); i++) {
			PanelTabelaCarga t = (PanelTabelaCarga) getComponentAt(i);
			t.carregarTabela();
		}
	}

	private String createTitle(String unidade, String subUni) {
		return "SU " + unidade + "." + subUni;
	}

	private boolean tabExists(String titulo) {
		for (int i = 0; i < getTabCount(); i++)
			if (titulo.equals(getTitleAt(i)))
				return true;
		return false;
	}

	public boolean isSaved() {
		for (int i = 0; i < getTabCount(); i++)
			if (!isSaved(i))
				return false;

		return true;
	}

	public boolean isSaved(int i) {
		PanelTabelaCarga panel = (PanelTabelaCarga) getComponentAt(i);
		if (panel == null)
			return false;
		return panel.isSaved();
	}

	public String getNotSavedTables() {
		Collection<String> tabelas = new ArrayList<String>();
		for (int i = 0; i < getTabCount(); i++)
			if (!isSaved(i))
				tabelas.add(getTitleAt(i));

		return tabelas.toString();
	}

	public void removeTabAt(String unidade, String subunidade) {
		String titulo = createTitle(unidade, subunidade);
		for (int i = 0; i < getTabCount(); i++)
			if (titulo.equals(getTitleAt(i)))
				removeTabAt(i);
		
	}

	public boolean saveAll() {
		boolean retorno = true;
		for (int i = 0; i < getTabCount(); i++) {
			PanelTabelaCarga t = (PanelTabelaCarga) getComponentAt(i);
			retorno &= t.save();
		}
		return retorno;
	}

}
